//
//  MDHFileConstant.h
//  MDHPT
//
//  Created by 高得华 on 2019/4/27.
//  Copyright © 2019年 高得华. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "LEEAlert.h"
#import "MDHMacro.h"


@class MMWDHButton, MDHFileConstant, MDHHTTPResponse;

//Block
typedef void(^MVVMWCTCAlertViewBlock)(int);
typedef void(^MVVMWCTCAlertViewTextBlock)(int, NSString *_Nullable);

NS_ASSUME_NONNULL_BEGIN

@interface MDHFileConstant : NSObject

///单例初始化
+ (MDHFileConstant *)share;

/// - ===== 设备型号 ===== -
///是否iPad
@property (nonatomic, assign, readonly) BOOL IS_IPAD;
///是否IS_IPHONE
@property (nonatomic, assign, readonly) BOOL IS_IPHONE;
///是否IS_IPHONE_4
@property (nonatomic, assign, readonly) BOOL IS_IPHONE_4;
///是否IS_IPHONE_5
@property (nonatomic, assign, readonly) BOOL IS_IPHONE_5;
///是否IS_IPHONE_6
@property (nonatomic, assign, readonly) BOOL IS_IPHONE_6;
///是否IS_IPHONE_6_PLUS
@property (nonatomic, assign, readonly) BOOL IS_IPHONE_6_PLUS;
///是否IS_IPHONE_X
@property (nonatomic, assign, readonly) BOOL IS_IPHONE_X;
///是否是iPhone X系列
@property (nonatomic, assign, readonly) BOOL iPhoneXSeries;
///屏幕尺寸的比例
@property (nonatomic, assign, readonly) CGFloat kAutoScale;

///导航栏的属性 translucent
@property (nonatomic, assign, readonly) BOOL translucent;
///导航栏 translucent为true时  距离顶部的距离
@property (nonatomic, assign, readonly) CGFloat kTranslucentTop;

///底部的安全区域
@property (nonatomic, assign, readonly) CGFloat kSafeAreaBottom;
///顶部的 状态栏的高度
@property (nonatomic, assign, readonly) CGFloat kSafeAreaTop;
///导航栏的高度
@property (nonatomic, assign, readonly) CGFloat kNavBarHeight;
///导航栏+状态栏 的高度
@property (nonatomic, assign, readonly) CGFloat kNavSafeArea;
///底部的安全区域+TabBar 的高度
@property (nonatomic, assign, readonly) CGFloat kTabbarSafeArea;
///TabBar 的高度
@property (nonatomic, assign, readonly) CGFloat kTabbarHeight;
///APP的名称 bundleName
@property (nonatomic, copy, readonly) NSString * bundleName;
///当前手机系统的版本号
@property (nonatomic, assign) CGFloat deviceSVersion;//, readonly

///回到主线程
+ (void)mainAsyncSafe:(VoidBlock)block;

//MARK: - ===== 导航栏 == 左右的按钮 ==
/**
 导航栏按钮 图片的形式
 
 @param image 图片名字 可以传空值即:返回按钮
 @param color 需要修改图片的颜色
 @param left 是否距离左侧
 @param target 谁执行
 @param action 执行的方法
 @return UIButton
 */
+ (MMWDHButton *)navImageButton:(NSString *)image
                          color:(UIColor * _Nullable)color
                           left:(BOOL)left
                         target:(id _Nullable)target
                         action:(SEL _Nullable)action;

/**
 导航栏按钮 文字的形式
 
 @param title 文字 默认为 确定
 @param color 需要修改图片的颜色
 @param font 字体大小 默认13
 @param left 是否距离左侧
 @param target 谁执行
 @param action 执行的方法
 @return UIButton
 */
+ (MMWDHButton *)navTitleButton:(NSString *)title
                          color:(UIColor *)color
                           font:(UIFont *)font
                           left:(BOOL)left
                         target:(id _Nullable)target
                         action:(SEL _Nullable)action;


//MARK: - == HUD ====== -
extern void ShowSuccessStatus(NSString *statues);
extern void ShowErrorStatus(NSString *statues);
extern void ShowMaskStatus(NSString *statues);
extern void ShowMessage(NSString *statues);
extern void ShowProgress(CGFloat progress);
extern void DismissHud(UIView * _Nullable view1);

///展示在哪个视图上
extern void ShowHUDMessage(NSString * statues, UIView * view1);
extern void ShowHUDMessageView(UIView * _Nullable view1);
///两秒之后消失的文本提醒
extern void ShowHUDMesHidden(NSString * statues, UIView * _Nullable view1);
extern void ShowHUDMesHiddenView(UIView * view1);
///只传文本
extern void ShowHUDMesageHiddenView(NSString * statues);

///有进度条的hud
- (void)showMBProgressHUD:(double)complete;

//MARK: - ====== AlertView ====== -
///一个确定按钮
extern void AlertViewShowOne(NSString * message);

///一个确定按钮 带返回值
extern void AlertViewShowOneB(NSString * message, MVVMWCTCAlertViewBlock block);

///一个确定按钮 带返回值
extern void AlertViewShowOneTB(NSString * title, NSString * message, MVVMWCTCAlertViewBlock block);

///一个确定按钮 带返回值 自定义名称
extern void AlertViewShowOneTBD(NSString * title, NSString * message, NSString * determine, MVVMWCTCAlertViewBlock block);

/**
 AlertView弹窗 两个按钮   2:确定 1:取消
 
 @param content 提示内容
 @param determine 按钮的名称
 @param right 是不是右侧
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowTwo(NSString * content, NSString * determine, BOOL right, MVVMWCTCAlertViewBlock block);

/**
 AlertView弹窗 两个按钮   2:确定 1:取消
 
 @param content 提示内容
 @param determine 按钮的名称
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowR(NSString * content, NSString * determine, MVVMWCTCAlertViewBlock block);


/**
 AlertView弹窗 两个按钮   2:确定 1:取消
 
 @param title 标题
 @param content 提示内容
 @param determine 按钮的名称
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowTR(NSString * title, NSString * content, NSString * determine, MVVMWCTCAlertViewBlock block);

/**
 AlertView弹窗 两个按钮   2:确定 1:取消
 
 @param title 标题
 @param content 提示内容
 @param determine 按钮的名称
 @param right 是不是右侧
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowT(NSString * title, NSString * content, NSString * determine, BOOL right, MVVMWCTCAlertViewBlock block);


/**
 AlertView弹窗 两个按钮   2:确定 1:取消
 
 @param title 标题
 @param content 提示内容
 @param cancle 取消按钮名称
 @param determine 确定
 @param right 是不是右侧
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowCD(NSString * title, NSString * content, NSString * cancle, NSString * determine, BOOL right, MVVMWCTCAlertViewBlock block);


/**
 AlertView弹窗 两个按钮   2:确定 1:取消
 
 @param title 标题
 @param content 提示内容
 @param cancle 取消按钮名称
 @param determine 确定
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowCDR(NSString * title, NSString * content, NSString * cancle, NSString * determine, MVVMWCTCAlertViewBlock block);

/**
 AlertView弹窗 带有输入框的   2:确定 1:取消
 
 @param title 标题
 @param content 内容
 @param placeholder textField的提示语
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowTextField(NSString * title, NSString * content, NSString * placeholder, MVVMWCTCAlertViewTextBlock block);

/**
 AlertView弹窗 带有输入框的   2:确定 1:取消
 
 @param type 文本框的键盘类型
 @param title 标题
 @param content 内容
 @param placeholder textField的提示语
 @param block 点击的是哪个按钮   2:确定 1:取消
 */
extern void AlertViewShowTextFieldType(UIKeyboardType type, NSString * title, NSString * content, NSString * placeholder, MVVMWCTCAlertViewTextBlock block);


/**
 大神取消订单的弹窗
 
 @param title 标题
 @param content 内容
 @param view 第三方视图
 @param block 点击的是哪个按钮   2:确定 1:取消 3:第三个按钮
 */
extern void AlertViewShowCancleOrder(NSString * title, NSString * content, UIView * view, MVVMWCTCAlertViewBlock block);


/**
 三个按钮的点击事件 自带取消按钮
 
 @param title 标题
 @param content 副标题
 @param titles 按钮数组
 @param block 由1依次增加
 */
extern void AlertViewShowMultipleButtons(NSString * title, NSString * content, NSArray <NSString *>* titles, MVVMWCTCAlertViewBlock block);


@end

NS_ASSUME_NONNULL_END



///单例 - 文件配置 类
static inline MDHFileConstant * kMMWPTFC() {
    return [MDHFileConstant share];
}
